[アップデート] Amazon Cognito で多要素認証(MFA)の方法に E メールを設定できるようになりました

[アップデート] Amazon Cognito で多要素認証(MFA)の方法に E メールを設定できるようになりました

Clock Icon2024.09.13

いわさです。

Amazon Cognito ユーザープールには多要素認証(MFA)の機能があります。
デフォルトは無効化されていますが、オプションで有効化が可能です。

76CB674C-8B3B-4F0B-9A8B-41046EA59F8F_1_105_c.jpeg

Cognito の MFA では認証の方法として、Google Authenticator など認証アプリケーションを使って time-based one-time passwords (TOTP) を発行、あるいは SMS メッセージで MFA コードを発行して使う仕組みだったのですが、アップデートで E メールも選択できるようになっていました。

EC067365-39CF-4DA1-9301-7C4AF367EEA1.png

アップデートアナウンスはまだ出ていませんが、AWS CLI や各種 SDK からは設定できるようになっていまして、また、マネジメントコンソールや公式ドキュメントも確認してみたところ E メールが設定出来るようになっていました。

https://github.com/aws/aws-cli/commit/c856238d7438db027fb2ab9957be18c2c42c916b

今回こちらの機能を有効化して認証フローを通してみましたので流れを紹介します。
従来の MFA オプションとして違って少し前提条件があります。

2024.09.14 追記

アップデートアナウンスも出ました。

https://aws.amazon.com/about-aws/whats-new/2024/09/amazon-cognito-user-pools-email-authentication-option/

高度なセキュリティ機能や Amazon SES の構成などの前提条件あり

早速設定してみようとしたのですが、次のように前提条件があることがわかりました。
私が確認出来たのは以下です。

  • 高度なセキュリティ機能 をアクティブ化
  • Amazon SES を利用して E メールを送信 するようにユーザープールを設定
  • E メール以外の方法を少なくとも 1 つ使用してアカウントの復旧 を許可

0AB6D5F0-CD37-4A33-B86D-FD4BF7E13FBC.png

上記のうち一つでも満たされていないと、次のように E メールオプションの有効化が出来ませんでした。

3AC6EC4D-76F4-4671-9AA9-1BB38F870676.png

前提条件を満たしている状態であれば有効化するだけ

上記前提条件さえクリアできていれば先程のチェックボックスで有効化するだけで使えます。
高度なセキュリティタブで機能を有効化します。

98AD0766-51A2-41F1-946F-A68C1D145BB2_1_105_c.jpeg

よく見てみるとこの画面上にも「E メールメッセージで MFA コードを送信」という項目が追加されていますね。

メッセージングタブで Cognito ユーザープールが使う送信メールサーバーに、デフォルトではなく Amazon SES を使うように設定してやります。

D83C723F-3F53-4171-AE83-1D7381AE7296_1_105_c.jpeg

また、ユーザーアカウントの復旧メッセージに E メールだけデフォルトで選択していたのですが、SMS も追加してみました。

9522DB7D-65AA-434E-81E1-286B779F001A_1_105_c.jpeg

上記の状態で再び MFA の E メールメッセージオプションを有効化したところ、変更することが出来ました。

B73FF7AA-E801-4DD6-A104-32795AF556CF_1_105_c.jpeg

E メールメッセージで MFA コードを受信し使ってみる

使ってみます。
まずはユーザー名とパスワードで認証 API を実行します。

% cat hoge1.json
{
    "AuthFlow": "USER_PASSWORD_AUTH",
    "AuthParameters": {
        "USERNAME": "iwasa.takahito@example.com",
        "PASSWORD": "hogehoge"
    },
    "ClientId": "2qi8stbpr21uunm0541jolnlq2"
}
% aws cognito-idp initiate-auth --cli-input-json file://hoge1.json
{
    "ChallengeName": "EMAIL_OTP",
    "Session": "AYA ... 3p7",
    "ChallengeParameters": {
        "CODE_DELIVERY_DELIVERY_MEDIUM": "EMAIL",
        "CODE_DELIVERY_DESTINATION": "i***@e***",
        "USER_ID_FOR_SRP": "a7b48ae8-a091-7084-df46-4fe84daa75ab"
    }
}

通常のUSER_PASSWORD_AUTHであればトークンがすぐに取得出来ますが、チャレンジ「EMAIL_OTP」を要求されましたね。ほう。

その瞬間、次のような E メールを受信しました。

0DBD40BE-1CA1-45C1-B6B4-65D11E551181.png

認証コードですね。こいつを使ってEMAIL_OTPチャレンジを実行しましょう。
RespondToAuthChallenge API を実行します。

% cat hoge2.json
{
    "ClientId": "2qi8stbpr21uunm0541jolnlq2",
    "ChallengeName": "EMAIL_OTP",
    "Session": "AYA ... 05Z",
    "ChallengeResponses": {
        "EMAIL_OTP_CODE": "998277",
        "USERNAME": "iwasa.takahito@example.com"
    }
}
% aws cognito-idp respond-to-auth-challenge --cli-input-json file://hoge2.json
{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "AccessToken": "eyJ ... L6Q",
        "ExpiresIn": 3600,
        "TokenType": "Bearer",
        "RefreshToken": "eyJ ... wsg",
        "IdToken": "eyJ ... EsA"
    }
}

今度は ID トークンやアクセストークンを取得することが出来ましたね。
無事認証することが出来ました。

さいごに

本日は Amazon Cognito の多要素認証(MFA)の方法に E メールを設定できるようになっていたので使ってみました。

これは要望として聞いたことあるので嬉しい方多そうですね。
最近 Cognito の高度なセキュリティで魅力的な機能がかなり増えてきたので、以前よりも有効化したいという方増えていそうな気がしますね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.